// "JCLCCRenderer.js"
// 自定义渲染器，内部提供各种模式渲染方法
// 执行渲染相关的方法，参考文档 “https://developer.xgrids.cn/#/document?titleId=cn-1742537877355”
// 文档索引为:其域创新官网=》文档=》LCC WebSDK开发文档=》SDK渲染性能参数指南

export class JCLCCRenderer {
    constructor() {

    }

    static executeRenderer(lccObject){
        // 下面的方法前面添加 _表示私有方法，不对外暴露
        // this._executeFullRendering(lccObject);
        this._executeLodRendering(lccObject);
    }

    // 全量渲染
    // 计算机性能较好时，可以通过setMaxSplats，设置为一个大于lod0、lod1的值，sdk会全量渲染，
    // 不会切换lod，渲染质量较好。建议不超过1000万点。
    static _executeFullRendering(lccObject){
        // 当前方法要想获取值，必须在 "LCCRender::load(param, succesCallback, loadingCallback)"执行成功后的回调中调用
        const lodInfos = lccObject.getLodInfos();
        console.log("_executeFullRendering() lodInfos:" + lodInfos);
        const lod0 = lodInfos[0];
        const lod1 = lodInfos[1];
        const defaultMaxSplats = 3000000;
        const lodResult = lod0 + lod1;
        const max = Math.max(defaultMaxSplats, lodResult);
        console.log("_executeFullRendering() lccObject.setMaxSplats() max:" + max + ",lodResult:" + lodResult);
        lccObject.setMaxSplats(max);
    }

    static _executeLodRendering(lccObject) {
        // lod模式渲染，第一人称漫游模式
        // 如果常用是第一人称漫游，可使用默认的lod策略，通过setMaxSplats接口调整最大渲染点数适应不同的硬件平台
        function lodRenderingByFirstPersonRoaming(lccObject){
            // 建议不超过1000万点(根据实际硬件情况设置此值)【3000000-10000000】
            const defaultMaxSplats = 3000000;
            console.log("lodRenderingByFirstPersonRoaming() lccObject.setMaxSplats() defaultMaxSplats:" + defaultMaxSplats);
            lccObject.setMaxSplats(defaultMaxSplats);
        }

        // 如果常用是全览视角，可以开启 setLodAutoLevelUp ，sdk会根据maxLoadSplatCount以及相机与lcc模型的距离计算出最佳的lod级别
        function lodRenderingByComprehensivePerspective(lccObject){
            // 这边相关代码需要设置吗?
            {
                const defaultMaxSplats = 3000000;
                lccObject.setMaxSplats(defaultMaxSplats);
            }

            // 开启空地一体化Lod策略
            {
                lccObject.setLodAutoLevelUp(true);
            }

            {
                const lodInfos = lccObject.getLodInfos();
                console.log("lodRenderingByComprehensivePerspective() lodInfos:" + lodInfos);
                lccObject.setEndLod(lodInfos.length - 2);
            }

            console.log("lodRenderingByComprehensivePerspective() 开启了空地一体策略");
        }


        // 下面是具体方法调用(上面是方法定义)
        // lodRenderingByFirstPersonRoaming(lccObject);
        lodRenderingByComprehensivePerspective(lccObject);
    }


}